﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace iri10
{
    public partial class frmPersonalizar : Form
    {
        TipoComponente[] tc; // Todos los tipos de componentes
        frmAgregarComponente fa = new frmAgregarComponente();

        public frmPersonalizar()
        {
            InitializeComponent();
        }

        private void actualizarTodo()
        {
            //este metodo es utilizado también para recargar las listas
            lstComponentes.Items.Clear();
            lstComponentesAlternativos.Items.Clear();

            /*Cargo el modelo*/
            txtModelo.Text = pcActual.PcActual.SModelo;

            /*Cargo los componentes de la pc actual*/
            lstComponentes.Items.AddRange(pcActual.PcActual.CompObligatorios);
            lstComponentes.Items.AddRange(pcActual.PcActual.CompModificable);
            lstComponentes.Items.AddRange(pcActual.PcActual.CompEliminable);

            //Elimino
            lblDiferenciaPrecio.Text = "";

            //Calculo el precio de la pc
            lblPrecioActual.Text = pcActual.PcActual.FPrecio.ToString();

            //Botones
            picModificar.Visible = false;
            picEliminar.Visible = false;

            txtCaracteristicas.Text = txtCaracteristicasAlternativas.Text = "";
            
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            actualizarTodo();

            //El precio de la base
            lblPrecioBase.Text = pcActual.PcActual.PcBase.FPrecio.ToString();

        }

        private void label3_Click(object sender, EventArgs e)
        {

        }

        private void lstComponentes_SelectedIndexChanged(object sender, EventArgs e)
        {
            /*Es eliminable*/
            if (!pcActual.PcActual.isEliminable((Componente)lstComponentes.SelectedItem))
                picEliminar.Visible = false;
            else
                picEliminar.Visible = true;

            //El boton modificable no esta habilitado, porque no selleccionó nada todavía
            picModificar.Visible = false;

            //Limpio la lista de alternativos
            lstComponentesAlternativos.Items.Clear();

            /*Muestro los componentes alternativos*/
            if (pcActual.PcActual.isModificable((Componente)lstComponentes.SelectedItem))
            {
                //Busco todos los componentes del mismo tipo al seleccionado
                lstComponentesAlternativos.Items.AddRange(((Componente)(lstComponentes.SelectedItem)).Tipo.lstComponentes);

                //Elimino de las opciones el componente acutalmente seleccionado
                lstComponentesAlternativos.Items.Remove(lstComponentes.SelectedItem);

                //Borro las características
                txtCaracteristicasAlternativas.Text = "";
            }

            //Borro la dif. de plata (porque no seleccione otro componente por el cual cambiarlo)
            lblDiferenciaPrecio.Text = "";

            if (lstComponentes.SelectedItem != null)
                txtCaracteristicas.Text = ((Componente)(lstComponentes.SelectedItem)).SCaracteristicas;
            else
                txtCaracteristicas.Text = "";
        }

        private void lstComponentesAlternativos_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Selecciono algo
            if (lstComponentesAlternativos.SelectedIndex == -1)
            {
                picModificar.Visible = false;
                return;
            }

            //Calculo la diferencia de precio
            lblDiferenciaPrecio.Text =
                (
                ((Componente)(lstComponentesAlternativos.SelectedItem)).FPrecio -
                ((Componente)(lstComponentes.SelectedItem)).FPrecio
                ).ToString();

            /*Es Modificable ( = No_Obligatorio)*/
            if (pcActual.PcActual.isModificable((Componente)lstComponentes.SelectedItem))
                picModificar.Visible = true;
            else
                picModificar.Visible = false;

            //Cargo las caracteristicas
            if (lstComponentesAlternativos.SelectedItem != null)
                txtCaracteristicasAlternativas.Text = ((Componente)lstComponentesAlternativos.SelectedItem).SCaracteristicas;
            else
                txtCaracteristicasAlternativas.Text = "";
        }

        /* El usuario desea eliminar un componente eliminable
         * 
         */


        private void btnComprar_Click(object sender, EventArgs e)
        {

        }

        private void picNext_Click(object sender, EventArgs e)
        {
            NegVentanas.showPedido();
        }

        private void picEliminar_Click(object sender, EventArgs e)
        {
            //if (!pcActual.PcActual.eliminarComponente(lstComponentes.SelectedItem))
            //TODO: ALgo paso, no lo pude eliminar

            pcActual.PcActual.eliminarComponente((Componente)lstComponentes.SelectedItem);

            //Cargo las listas de nuevo
            actualizarTodo();
        }

        private void picModificar_Click(object sender, EventArgs e)
        {
            pcActual.PcActual.modificarComponente(
                (Componente)lstComponentes.SelectedItem,
                (Componente)lstComponentesAlternativos.SelectedItem);

            actualizarTodo();
        }

        private void picAgregar_Click(object sender, EventArgs e)
        {
            fa = new frmAgregarComponente();
            fa.MdiParent = this.MdiParent;
            fa.Show();

            this.Visible = false;

            while (fa.Tag != "Cerrado")
                Application.DoEvents();

            this.Visible = true;

            actualizarTodo();
        }

        private void picBack_Click(object sender, EventArgs e)
        {
            NegVentanas.showSeleccionarPcBase();
        }

        private void frmPersonalizar_Shown(object sender, EventArgs e)
        {
            //167 - 72

            Point p = new Point();
            p.X = 167;
            p.Y = -Height;

            for (int iCont = 0; iCont <= 25; iCont++)
            {
                p.Y += (72 + this.Height) / 25;
                this.Location = p;
                Application.DoEvents();
            }
        }

        private void frmPersonalizar_FormClosing(object sender, FormClosingEventArgs e)
        {
            ocultar();
        }

        public void ocultar()
        {
            Point p = new Point();
            p.X = 167;
            p.Y = Location.Y;

            //Si estaba agregando, y me mando a ocultar, cierro el agregar
            if (fa != null)
            {
                fa.Close();
                fa = null;
            }

            for (int iCont = 25; iCont >= 0; iCont--)
            {
                p.Y -= (167 + this.Height) / 25;
                this.Location = p;
                Application.DoEvents();
            }
        }

        private void txtCaracteristicasAlternativas_TextChanged(object sender, EventArgs e)
        {

        }

        private void txtCaracteristicasAlternativas_KeyPress(object sender, KeyPressEventArgs e)
        {
            //No se puede modificar
            e.Handled = true;
           // e.KeyChar = '';
        }

        private void txtCaracteristicas_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
        }

   

    }
}
